﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq.SqlClient;
using DALL.Helpers;

namespace DALL.Modelos
{
    
    public class Modelo
    {
        private RepositorioDataContext repositorio = null;

        public Modelo()
        {
                repositorio = new RepositorioDataContext();
        }

#region Cliente
        public MessageHelper AddCliente(string apellido, string nombre, string email)
        {

            var persona = new Persona() { apellido = apellido, nombre = nombre, email = email, bajaLogica = false };

            try
            {
                repositorio = new RepositorioDataContext();
                repositorio.Personas.InsertOnSubmit(persona);
                repositorio.SubmitChanges();
                return new MessageHelper() {status = true, message = "Los datos se han enviado correctamente"};

            }
            catch (Exception ex)
            {

                return new MessageHelper()
                           {
                               status = false,
                               message =
                                   "No se ah almacenado correctamente los datos, pongase en contacto con el administrador del sistema. Razon:\r\n" +
                                   ex.Message
                           };
            }
        }

        public decimal GetIdPersona(string nombre, string apellido, string email)
        {
            var id = from persona in repositorio.Personas
                     where persona.nombre == nombre && persona.apellido == apellido && persona.email == email
                     select persona.numeroDocumento;
            return id.ToList()[0];
        }

        #endregion


#region Viajes

        public MessageHelper AddSeguroViaje(int idCliente, int idTipoViaje, int idOrigen, int idDestino, int edad1, int edad2, int edad3, int edad4, int edad5, string fechaSalida, string fechaRegreso)
        {
            var seguroViaje = new SeguroViaje()
                                            {
                                                idPaisOrigen = idOrigen,
                                                idViajaA = idDestino,
                                                idTipoViaje = idTipoViaje,
                                                numeroDocumento = idCliente,
                                                fechaSalida = DateTime.Parse(fechaSalida),
                                                fechaRegreso = DateTime.Parse(fechaRegreso),
                                                edad1 = edad1,
                                                edad2 = edad2,
                                                edad3 = edad3,
                                                edad4 = edad4,
                                                edad5 = edad5,
                                                bajaLogica = false
                                            };

            try
            {
                repositorio = new RepositorioDataContext();
                repositorio.SeguroViajes.InsertOnSubmit(seguroViaje);
                repositorio.SubmitChanges();
                return new MessageHelper() { status = true, message = "Los datos se han enviado correctamente" };

            }
            catch (Exception ex)
            {

                return new MessageHelper()
                {
                    status = false,
                    message =
                        "No se ah almacenado correctamente los datos, pongase en contacto con el administrador del sistema. Razon:\r\n" +
                        ex.Message
                };
            }
        }

        public List<String> GetTipoViaje()
        {
            var tipoViaje = from viaje in repositorio.TipoViajes
                            orderby viaje.nombre ascending 
                            select viaje.nombre;
            return tipoViaje.ToList();
        }

        public List<String> GetPaisOrigen()
        {
            var paisOrigen = from origen in repositorio.PaisOrigens
                             orderby origen.nombre ascending
                             select origen.nombre;
            return paisOrigen.ToList();
        }

        public List<String> GetViajaA()
        {
            var viajaA = from destino in repositorio.ViajaAs
                         orderby destino.nombr ascending
                         select destino.nombr;
            return viajaA.ToList();
        }

        public int GetIdTipoViaje(string nombre)
        {
            var id = from tipoViaje in repositorio.TipoViajes
                     where tipoViaje.nombre == nombre
                     select tipoViaje.idTipoViaje;
            return id.ToList()[0];
        }

        public int GetIdOrigen(string nombre)
        {
            var id = from origen in repositorio.PaisOrigens
                     where origen.nombre == nombre
                     select origen.idPaisOrigen;
            return id.ToList()[0];
        }

        public int GetIdDestino(string nombre)
        {
            var id = from destino in repositorio.ViajaAs
                     where destino.nombr == nombre
                     select destino.idViajaA;
            return id.ToList()[0];
        }

        #endregion
    }
}
